package 周赛._277;

/**
 * @author 会玩的洋洋
 */
public class _5991_按符号重排数组 {
    /**
     * 使用三个数组进行存储
     * 一个数组用于存储正整数、一个用于存储负整数、一个用于存储结果
     * 对目标数组进行遍历，将正整数和负整数区分开，分别存入 positiveNums negativeNums，
     * 最后再遍历一遍，如果 i % 2 == 0 则代表需要存储正整数，因此在 positiveNums 提取
     * 反之  在 negativeNums 中提取
     * @param nums 目标数组
     * @return int[]
     */
    public int[] rearrangeArray(int[] nums) {
        int n = nums.length;
        int[] positiveNums = new int[n >> 1];
        int[] negativeNums = new int[n >> 1];
        int[] ans = new int[n];
        // 将原数组中的正整数和负整数分离
        for (int i = 0, j = 0, k = 0; i < n; i++) {
            if (nums[i] < 0) {
                negativeNums[k++] = nums[i];
            } else {
                positiveNums[j++] = nums[i];
            }
        }
        // 遍历将正整数和负整数交叉存入 ans
        for (int i = 0, j = 0, k = 0; i < n; i++) {
            if (i % 2 == 0) {
                ans[i] = positiveNums[j++];
            } else {
                ans[i] = negativeNums[k++];
            }
        }
        return ans;
    }

}
